SQL HAVING Clause

Aggregate functions-உடன் WHERE keyword பயன்படுத்த முடியாததால் HAVING clause SQL-ல் சேர்க்கப்பட்டது

HAVING Clause என்றால் என்ன?

HAVING clause SQL-ல் சேர்க்கப்பட்டது, ஏனெனில் WHERE keyword aggregate functions-உடன் பயன்படுத்த முடியாது.

HAVING தொடரியல்

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

ஆர்ப்பாட்ட தரவுத்தளம்

Northwind மாதிரி தரவுத்தளத்தில் "Customers" அட்டவணையில் இருந்து ஒரு தேர்வு கீழே உள்ளது:

Customers அட்டவணை

+------------+--------------------------------+----------------+-------------------+----------+------------+---------+
| CustomerID | CustomerName                   | ContactName    | Address           | City     | PostalCode | Country |
+------------+--------------------------------+----------------+-------------------+----------+------------+---------+
| 1          | Alfreds Futterkiste            | Maria Anders   | Obere Str. 57     | Berlin   | 12209      | Germany |
| 2          | Ana Trujillo Emparedados...    | Ana Trujillo   | Avda. Constitución| México   | 05021      | Mexico  |
| 3          | Antonio Moreno Taquería        | Antonio Moreno | Mataderos 2312    | México   | 05023      | Mexico  |
| 4          | Around the Horn                | Thomas Hardy   | 120 Hanover Sq.   | London   | WA1 1DP    | UK      |
| 5          | Berglunds snabbköp             | Christina Berg | Berguvsvägen 8    | Luleå    | S-958 22   | Sweden  |
+------------+--------------------------------+----------------+-------------------+----------+------------+---------+

SQL HAVING உதாரணங்கள்

பின்வரும் SQL statement ஒவ்வொரு நாட்டிலும் உள்ள வாடிக்கையாளர்களின் எண்ணிக்கையை பட்டியலிடுகிறது. 5 க்கும் மேற்பட்ட வாடிக்கையாளர்கள் உள்ள நாடுகளை மட்டும் சேர்க்கவும்:

உதாரணம்

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;

பின்வரும் SQL statement ஒவ்வொரு நாட்டிலும் உள்ள வாடிக்கையாளர்களின் எண்ணிக்கையை பட்டியலிடுகிறது, உயர் முதல் குறைந்த வரிசையில் வரிசைப்படுத்தப்பட்டது (5 க்கும் மேற்பட்ட வாடிக்கையாளர்கள் உள்ள நாடுகளை மட்டும் சேர்க்கவும்):

உதாரணம்

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;

கூடுதல் ஆர்ப்பாட்ட தரவுத்தளம்

Northwind மாதிரி தரவுத்தளத்தில் "Orders" அட்டவணையில் இருந்து ஒரு தேர்வு:

Orders அட்டவணை

+---------+------------+-----------+------------+------------+
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
+---------+------------+-----------+------------+------------+
| 10248   | 90         | 5         | 1996-07-04 | 3         |
| 10249   | 81         | 6         | 1996-07-05 | 1         |
| 10250   | 34         | 4         | 1996-07-08 | 2         |
+---------+------------+-----------+------------+------------+

மற்றும் "Employees" அட்டவணையில் இருந்து ஒரு தேர்வு:

Employees அட்டவணை

+------------+-----------+-----------+------------+------------+----------------------+
| EmployeeID | LastName  | FirstName | BirthDate  | Photo      | Notes                |
+------------+-----------+-----------+------------+------------+----------------------+
| 1          | Davolio   | Nancy     | 1968-12-08 | EmpID1.pic | Education includes...|
| 2          | Fuller    | Andrew    | 1952-02-19 | EmpID2.pic | Andrew received...   |
| 3          | Leverling | Janet     | 1963-08-30 | EmpID3.pic | Janet has a BS...    |
+------------+-----------+-----------+------------+------------+----------------------+

மேலும் HAVING உதாரணங்கள்

பின்வரும் SQL statement 10 க்கும் மேற்பட்ட ஆர்டர்களை பதிவு செய்துள்ள ஊழியர்களை பட்டியலிடுகிறது:

உதாரணம்

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;

பின்வரும் SQL statement "Davolio" அல்லது "Fuller" ஊழியர்கள் 25 க்கும் மேற்பட்ட ஆர்டர்களை பதிவு செய்திருந்தால் பட்டியலிடுகிறது:

உதாரணம்

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;

WHERE vs HAVING

WHERE Clause

  • வரிசைகளை குழுவாக்குவதற்கு முன் வடிகட்ட பயன்படுகிறது
  • தனிப்பட்ட வரிசைகளில் வேலை செய்கிறது
  • Aggregate functions-உடன் பயன்படுத்த முடியாது
  • GROUP BY-க்கு முன் வருகிறது
SELECT Country, COUNT(*)
FROM Customers
WHERE Country IN ('Germany', 'France')
GROUP BY Country;

HAVING Clause

  • குழுக்களை குழுவாக்கிய பின் வடிகட்ட பயன்படுகிறது
  • குழுவாக்கப்பட்ட முடிவுகளில் வேலை செய்கிறது
  • Aggregate functions-உடன் பயன்படுத்த முடியும்
  • GROUP BY-க்கு பின் வருகிறது
SELECT Country, COUNT(*)
FROM Customers
GROUP BY Country
HAVING COUNT(*) > 5;

முக்கிய வேறுபாடு:

WHERE தனிப்பட்ட வரிசைகளை வடிகட்டுகிறது, HAVING குழுவாக்கப்பட்ட முடிவுகளை வடிகட்டுகிறது.

WHERE vs HAVING காட்சிப் பிரதிநிதித்துவம்

1

FROM & WHERE

அட்டவணையில் இருந்து தரவு பெறப்பட்டு WHERE-ல் வரிசைகள் வடிகட்டப்படுகின்றன

FROM Customers WHERE Country='Germany'
2

GROUP BY

வடிகட்டப்பட்ட வரிசைகள் குழுவாக்கப்படுகின்றன

GROUP BY City
3

HAVING

குழுவாக்கப்பட்ட முடிவுகள் HAVING-ல் வடிகட்டப்படுகின்றன

HAVING COUNT(*) > 2
4

SELECT & ORDER BY

இறுதி முடிவுகள் தேர்ந்தெடுக்கப்பட்டு வரிசைப்படுத்தப்படுகின்றன

SELECT City, COUNT(*) ORDER BY COUNT(*) DESC

கவனிக்க: WHERE குழுவாக்கத்திற்கு முன் வேலை செய்கிறது, HAVING குழுவாக்கத்திற்கு பின் வேலை செய்கிறது.

நடைமுறை பயன்பாட்டு நிகழ்வுகள்

செயல்திறன் பகுப்பாய்வு

குறிப்பிட்ட வரம்புகளை தாண்டிய ஊழியர்கள் அல்லது வாடிக்கையாளர்களைக் கண்டறிய

SELECT EmployeeID, COUNT(OrderID)
FROM Orders
GROUP BY EmployeeID
HAVING COUNT(OrderID) > 50;

விற்பனை அறிக்கைகள்

குறிப்பிட்ட விற்பனை குறிகாட்டிகளை அடைந்த தயாரிப்புகளைக் கண்டறிய

SELECT ProductID, SUM(Quantity)
FROM OrderDetails
GROUP BY ProductID
HAVING SUM(Quantity) > 1000;

புவியியல் பகுப்பாய்வு

குறிப்பிட்ட எண்ணிக்கையிலான வாடிக்கையாளர்களைக் கொண்ட நகரங்களைக் கண்டறிய

SELECT City, COUNT(CustomerID)
FROM Customers
GROUP BY City
HAVING COUNT(CustomerID) > 3;

பயிற்சி

SQL HAVING clause-ன் முதன்மை நோக்கம் என்ன?

குழுவாக்குவதற்கு முன் ஒரு நிபந்தனையின் அடிப்படையில் வரிசைகளை வடிகட்ட
✗ தவறு! இது WHERE clause-ன் வேலை
குழுவாக்கிய பின் ஒரு aggregate நிபந்தனையின் அடிப்படையில் குழுக்களை வடிகட்ட
✓ சரி! HAVING clause குழுவாக்கப்பட்ட பிறகு aggregate conditions-ஐப் பயன்படுத்தி குழுக்களை வடிகட்ட பயன்படுகிறது
முடிவு தொகுப்பை ஏறுவரிசை அல்லது இறங்குவரிசையில் வரிசைப்படுத்த
✗ தவறு! இது ORDER BY clause-ன் வேலை
பல அட்டவணைகளை இணைக்க
✗ தவறு! இது JOIN-ன் வேலை